package com.demo.core.service.base;

import java.util.List;

import com.demo.core.dao.base.support.ResultSearchResult;
import com.demo.core.model.Area;

/**
 * 区域模型访问服务接口
 * 
 * @author ryuu.kk
 *
 */
public interface AreaService extends BaseCoreService<Area, Long> {

	/**
	 * 更新区域名称和区域码
	 * @param id 主键ID
	 * @param name 区域名称
	 * @param code 区域码
	 */
	void update(Long id, String name, String code);
	
	/**
	 * 通过Id查询区域对象
	 * @param id 外键ID
	 * @return 区域对象
	 */
	Area find(Long id);
	
	/**
	 * 通过站点外键ID和区域码查询区域模型
	 * @param siteId 站点外键ID
	 * @param code 区域码
	 * @return 区域对象
	 */
	Area find(Long siteId, String code);
	
	/**
	 * 通过站点ID查询站点内支持的所有区域
	 * @param siteId 站点外键ID
	 * @return 区域对象列表
	 */
	List<Area> findList(Long siteId);
	
	/**
	 * 通过区域的外键ID查询该区域的所属区域
	 * @param id 区域外键ID
	 * @param 查询树的深度.当前ID的数据作为根向下查询.
	 * 			当前节点深度为0,它的下一结点的深度为1,依次类推
	 * @return 区域对象模型
	 */
	Area tree(Long id, int... depths);
	
	/**
	 * 通过区域的外键ID查询该区域的所有所属区域
	 * @param id 区域外键ID
	 * @return 区域对象模型
	 */
	Area tree(Long id);
	
	/**
	 * 通过站点外键ID分页查询站点所持有的区域列表
	 * @param siteId 站点外键ID
	 * @param firstResult 数据在第一条的位置
	 * @param maxResults 最大检索数据量
	 * @return 
	 */
	ResultSearchResult<Area> search(Long siteId, int firstResult, int maxResults);
}
